
require("Scripts/Common/Utility")
require("Scripts/Common/Class")
require("Scripts/EntitySystem/CommonEntity")

CommonEntityGroup = Class(CommonEntity)

function CommonEntityGroup:Ctor()
	self._childs = {}					-- 控件的子控件
	self._show = SailCommonEntities()	-- 创建显示控件

	self._abs_alpha = 1			-- 控件的绝对alpha = 父控件的绝对alpha * 控件自身的alpha
	self._abs_visible = true	-- 控件的绝对visible = 父控件的绝对visible && 控件自身的visible
end

-- 获取子控件的索引
function CommonEntityGroup:GetChildIndex(child)
	-- 判定child的父控件是否是自己，如果不是则返回无效值0
	if child._parent ~= self then return 0 end
	-- 遍历子控件列表，找到控件所对应的索引
	for k, v in ipairs(self._childs) do
		if v == child then return k end
	end
	-- 没有找到直接返回无效值0
	return 0
end

-- 添加子控件
function CommonEntityGroup:AddChild(child)
	-- 判定child的父控件是否是自己，如果不是则返回false
	if child._parent == self then return false end
	-- 判定child是否有父控件，如果有则父控件移除child
	if child._parent then child._parent:RemoveChild(child) end
	-- 把child的父控件设置为自己
	child._parent = self
	-- 把child插入到队首
	table.insert(self._childs, 1, child)
	-- 把child的show添加到自己的show中
	self._show:AddChild(child._show)
	-- 刷新child的一些属性
	child:SetVisible(child._visible)
	child:SetAlpha(child._alpha)
	child:SetDisable(child._disable)
	return true
end

-- 移除子控件
function CommonEntityGroup:RemoveChild(child)
	-- 判定child的父控件是否是自己，如果不是则返回false
	if child._parent ~= self then return false end
	-- 移除show
	self._show:RemoveChild(child._show)
	-- 从child队列中移除
	table.remove(self._childs, self:GetChildIndex(child))
	-- child的父控件设置为空
	child._parent = nil
	return true
end

-- 由于控件组没有RGB，所以什么都不做
function CommonEntity:SetRed(red)
end
-- 由于控件组没有RGB，所以什么都不做
function CommonEntity:SetGreen(green)
end
-- 由于控件组没有RGB，所以什么都不做
function CommonEntity:SetBlue(red)
end

-- 设置alpha值
function CommonEntity:SetAlpha(alpha)
	-- 设置控件自身的alpha
	self._alpha = alpha
	-- 计算控件的绝对alpha
	if self._parent then
		self._abs_alpha = self._parent._abs_alpha * alpha
	else
		self._abs_alpha = alpha
	end
	-- 刷新子控件的alpha
	for k, v in pairs(self._childs) do
		v:SetAlpha(v._alpha)
	end
end

-- 设置是否可见
function CommonEntity:SetVisible(visible)
	-- 设置控件自身的visible
	self._visible = visible
	-- 设置控件绝对的visible
	if self._parent then
		self._abs_visible = self._parent._abs_visible and visible
	else
		self._abs_visible = visible
	end
	-- 刷新子控件的visible
	if self._show then
		self._show:SetVisible(self._abs_visible)
	end
end

-- 设置是否禁用
function CommonEntity:SetDisable(disable)
	-- 设置控件自身的disable
	self._disable = disable
	-- 设置控件绝对的disable
	if self._parent then
		self._abs_disable = self._parent._abs_disable or disable
	else
		self._abs_disable = disable
	end
	-- 刷新子控件的disable
	for k, v in pairs(self._childs) do
		v:SetDisable(v._disable)
	end
end